"""author: wenyao
   data: 2021/5/8
   project: devopscmdb
"""

class Parent:
    """
    this is parent
    class

    """
    tmp = "tmp"
    _min = 1     #保护属性
    __max = 10   #私有属性

    def __init__(self):
        self.name = "sc"
        self._age = 4
        self.__desc = "it"

    def __make(self):
        print("这是一个私有方法")
        print(self.__desc)

    def _protectmake(self):
        print("这是一个保护方法")

    def show(self):
        print(self.__max, self.__desc)
        print("这是一个普通实例方法")

class Child(Parent):
    pass
    #父类私有的self.__max  不能被子类访问
    def show(self):
        print(self.__max)

class Child2(Child):
    pass

#Parent
#类属性  tmp，_min, __max
#实例属性 name, _age, __decs
#实例方法 __make _protectmake show
p = Parent()
c1 = Child()
c2 = Child2()

#访问tmp
# print(p.tmp, c1.tmp)
# #访问保护变量 _min, _age _protectmake
# print(p._min, p._age)
# print(c1._min, c1._age)
# p._protectmake()
# c1._protectmake()
#访问私有变量 __max __desc __make
# print(p.__max, p.__desc)
# print(p.__dict__)
# print(p._Parent__max)
# # p.show()
# c1.show()

#__dict__查看命名空间中有哪些属性
# print(p.__dict__)

#python 私有变量是一个伪私有
#__max  -->_类名__max
#可以通过_类名__属性名 这种方式访问到私有成员

#查看对象的属性方法
#dir 查看对象的属性和方法，但是无法区分谁是属性，谁是方法
# print(dir(p))
#__dict__ 了解哪些是属性，哪些是方法
# print(p.__dict__)
# print(Parent.__dict__)

# #文档注释
# # print(help(Parent))
# print(Parent.__doc__)
#
# #类名
# print(Parent.__name__)
#
# #类所在模块
# print(Parent.__module__)  #-->__name__
#
# #查看对象属于哪个类
# print(p.__class__)
#
# #查看父类
# # print(dir(c1))
# print(Child2.__bases__)
# print(c2.__hash__)
